package cn.iocoder.yudao.module.call.service.listenaction.action;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.call.api.form.dto.FieldRuleDTO;
import cn.iocoder.yudao.module.call.enums.CallActionEnum;
import cn.iocoder.yudao.module.call.enums.CallListenEnum;
import cn.iocoder.yudao.module.call.service.listenaction.action.dto.ActionInfoDTO;
import cn.iocoder.yudao.module.call.service.listenaction.listen.dto.ListenActionParamDTO;

import java.util.List;
import java.util.Map;

public interface CallAction {


    /**
     * 返回动作规则
     */
    List<FieldRuleDTO> rules();


    void execute(ListenActionParamDTO paramDTO);

    /**
     * 解析规则信息
     *
     * @param actionParam
     * @return
     */
    default JSONObject parse(String actionParam) {
        return JSONUtil.parseObj(actionParam);
    }

    default Map<String, FieldRuleDTO> rulesMap() {
        return CollectionUtils.convertMap(rules(), FieldRuleDTO::getField);
    }

    /**
     * 获取对应枚举
     * @return
     */
    default CallActionEnum getActionEnum() {
        String className = getClass().getSimpleName();
        String beanName = className.substring(0, 1).toLowerCase() + className.substring(1);
        return CallActionEnum.getByAction(beanName);
    }

    /**
     * 动作详情
     * @return
     */
    default ActionInfoDTO info() {
        CallActionEnum actionEnum = getActionEnum();
        return new ActionInfoDTO().setTitle(actionEnum.getTitle())
                .setCode(actionEnum.getAction())
                .setRules(rules());
    }
}
